﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using PrimeraAFantasyFootballl.Models;
using System.Web.Security;

namespace PrimeraAFantasyFootballl.Controllers
{
    public class LigaController : Controller
    {

        LigaRepository ligarepository = new LigaRepository();
        Equipo_en_LigaRepository equipoenligarepo = new Equipo_en_LigaRepository();
        UsuarioRepository usuariorepository = new UsuarioRepository();
        EquipoRepository equiporepo = new EquipoRepository();
        Puntos_EquipoRepository puntosrepository = new Puntos_EquipoRepository();
        //
        // GET: /Liga/

        public ActionResult Index()
        {
            var ligas = ligarepository.FindAll();
            return View("Index", ligas);
        }




        public ActionResult Create()
        {

            return View("Create");
        }
   
        //
        // POST: /Liga/Create
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create(FormCollection collection)
        {

            Liga liga = new Liga();
            try
            {
                
                liga.Nombre = Request.Form["Nombre"];

                int ide = 0;
                foreach(var usuario in usuariorepository.FindAllUsers()){ if(usuario.Username.Equals(User.Identity.Name)) ide = usuario.UsuarioID;}
                liga.UsuarioCreadorID = ide;

                UpdateModel(liga);
                ligarepository.Add(liga);

                ligarepository.Save();

                Roles.CreateRole(liga.Nombre);

                string[] lista = new string[1];
                lista[0] = User.Identity.Name;

                Roles.AddUsersToRole(lista, liga.Nombre);


                // TODO: Add insert logic here

                return RedirectToAction("Index");
            }
            catch
            {
                foreach (var issue in liga.GetRuleViolations())
                {
                    ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
                }
                return View(liga);
            }

        }

       

             //
        // GET: /Liga/Details/numeroywea!
        public ActionResult Details(int id) 
        {        
            List<Equipo_en_Liga> equiposenliga = new List<Equipo_en_Liga>();
            Liga liga = ligarepository.GetLiga(id);

            foreach (var eel in equipoenligarepo.FindAll())
            {
                if (eel.LigaID.Equals(id)) { equiposenliga.Add(eel); }
            }
            
            if (equiposenliga.Count() == 0) { return View("SinEquipos", liga); }
            else
            {   
                List<int> listadepuntajes = new List<int>();

                foreach (var equipo in equiposenliga)
                {
                    int puntos=puntosrepository.GetPuntosTotales(equipo.EquipoID);
                    listadepuntajes.Add(puntos);
                }

                for (int h = 0; h < listadepuntajes.Count; h++)
                {

                    for (int k = h; k < listadepuntajes.Count; k++)
                    {
                        if (listadepuntajes[k] > listadepuntajes[h])
                        {
                            int aux = listadepuntajes[h];
                            listadepuntajes[h] = listadepuntajes[k];
                            listadepuntajes[k] = aux;

                            Equipo_en_Liga auxi = equiposenliga[h];
                            equiposenliga[h] = equiposenliga[k];
                            equiposenliga[k] = auxi;

                        }

                    }
                }
                
                
                for (int i = 0; i < listadepuntajes.Count; i++)
                {
                    ViewData["Puntaje" + i.ToString()] = listadepuntajes[i].ToString();
                }

                return View(equiposenliga);
            }
        
        }



        public List<Equipo> EquiposDisponiblesParaLiga(int id) 
        {        
            Liga l = new Liga();
            List<int> ides = new List<int>();
            List<Equipo> equipos = equiporepo.FindAllTeams().ToList();


            foreach (var eel in l.Eeldeunaliga(id)) 
            {
                ides.Add(eel.EquipoID);           
            }

            for (int i = 0; i < equipos.Count(); i++)
            {
                foreach (var ide in ides)
                {
                    if (equipos[i].EquipoID.Equals(ide)) { equipos.Remove(equipos[i]); }

                }

            }

            return equipos;
                   
        
        }

        public ActionResult InvitarEquipos(int id) 
        {
            return View("InvitarEquipos", EquiposDisponiblesParaLiga(id));       
        }


        //
        // POST: /Liga/Invitarequipos

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult InvitarEquipos(int id, FormCollection formValues) 
        {

            Equipo_en_Liga eeq = new Equipo_en_Liga();
            List<Equipo> equipos = new List<Equipo>();

            foreach (var eq in EquiposDisponiblesParaLiga(id)) 
            {
                string prueba = Request.Form[eq.EquipoID.ToString()];
                if (Request.Form[eq.EquipoID.ToString()].Equals("true,false")) { equipos.Add(eq); }           
            }
        
            foreach(var ese in equipos)
            {           
                eeq.EquipoID = ese.EquipoID;
                eeq.LigaID = id;
                equipoenligarepo.Add(eeq);
                
            }
            equipoenligarepo.Save();
        
            
            return Index();
        
        }


    }
}
